home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / progtool / modula2 / module / easydial.def < prev    next >
Text File  |  1995-11-25  |  16KB  |  280 lines

  1. (******************************************************************************)
  2. (*      This MODULE is Public Domain. Copy me like a beast!                   *)
  3. (*               Christian Ledermann                                          *)
  4. (*               Wölfelkofen 2                                                *)
  5. (*               84166 Adlkofen                                               *)
  6. (******************************************************************************)
  7. (*                                                                            *)
  8. (* Started:   20.12.92     03:54:30                                           *)
  9. (* Version: 20.12.89   03:504:12:54                                           *)
  10. (*                                                                            *)
  11. (******************************************************************************)
  12. (*                                                                            *)
  13. (* Diese Software ist ohne jede Garantie. Ich verspreche                      *)
  14. (* keinerlei Wartung und übernehme keine Verantwortung für Schäden die        *)
  15. (* durch die Benutzung dieses Programmes entstehen.                           *)
  16. (* Jegliche Ersatzansprüche lehne ich ab.                                     *)
  17. (*                                                                            *)
  18. (******************************************************************************)
  19. DEFINITION MODULE EasyDialog;
  20.  
  21. FROM SYSTEM IMPORT ADDRESS,WORD;
  22.  
  23. TYPE
  24.      TreePROC = PROCEDURE (ADDRESS, INTEGER);
  25.  
  26. CONST
  27.   (* Diese beiden CONSTanten sind in GEMAESBase falsch definiert !! *)
  28.      EndMouseControl=2;
  29.      BeginMouseControl=3;
  30.   (* Zum Arbeiten also unbedingt(!!) diese hier benutzen *)
  31.  
  32. PROCEDURE and(a,b:WORD):BOOLEAN;
  33. (********** Bitweiser Vergleich wie in C *********)
  34.  
  35. PROCEDURE WorkTree(TreePtr :ADDRESS; StartObject,EndObject : INTEGER;
  36.                                                         Do : TreePROC);
  37.  
  38. (************** ObjectStruktur eines Baumes durchforsten *************)
  39. (* WorkTree wandert die Objectstruktur eines Baumes ab und führt     *)
  40. (* dabei die Routine Do aus, die das aktuelle Object bearbeitet      *)
  41. (* Soll der ganze Baum bearbeitet werden, müssen StartObject und     *)
  42. (* EndObject 0 sein.                                                 *)
  43. (* Portiert von c -> M2 Orginal in ST-Computer 5/88                  *)
  44. (*********************************************************************)
  45.  
  46. PROCEDURE FormButton(Tree :ADDRESS; Object,Clicks : INTEGER;
  47.                      VAR NextObject :INTEGER):INTEGER;
  48. (***** Primitive AES-Funktion wird für FormMoveDial benötigt *********)
  49. (* Die Funktion wertet Mausknopfeingaben in Dialogen aus.            *)
  50. (* Tree : Adresse des Dialoges, zu ermitteln mit                     *)
  51. (* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse)                 *)
  52. (* Object : enthält das aktuelle Object                              *)
  53. (* Clicks : maximale Anzahl von Mausclicks                           *)
  54. (* NextObject : neues Aktuelles Object nach dem Funktionsaufruf      *)
  55. (* Funktionsergebnis ist ein Wert # 0 wenn ein Exit-Object ausgewählt*)
  56. (* wurde. Dieser Wert entspricht der Nummer des angewählten Objectes *)
  57. (* -> ST 2/92                                                        *)
  58. (*********************************************************************)
  59.  
  60. PROCEDURE FormKeyboard(Tree :ADDRESS; Object,Next,Char:INTEGER;
  61.                        VAR NextObject,NextChar :INTEGER):INTEGER;
  62. (***** Primitive AES-Funktion wird für FormMoveDial benötigt *********)
  63. (* Die Funktion wertet Tastatureingaben in Dialogen aus.             *)
  64. (* Tree : Adresse des Dialoges, zu ermitteln mit                     *)
  65. (* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse)                 *)
  66. (* Object : enthält das aktuelle Object                              *)
  67. (* Next   : nächstes Object                                          *)
  68. (* NextObject : aktuelles Object nach dem Funktionsaufruf            *)
  69. (* NextChar : nächstes Zeichen                                       *)
  70. (* Funktionsergebnis ist ein Wert # 0 wenn ein Exit-Object ausgewählt*)
  71. (* wurde. Dieser Wert entspricht der Nummer des angewählten Objectes *)
  72. (* Hier also immer die Nummer des Default-Objectes                   *)
  73. (* -> ST 2/92                                                        *)
  74. (*********************************************************************)
  75.  
  76.  
  77. PROCEDURE FileSelectXtendedInput(VAR InPath,InSelect:ARRAY OF CHAR;
  78.                  VAR ExButton:INTEGER; label: ARRAY OF CHAR):INTEGER;
  79.  
  80. (************** Der Fileselctor ab TOS 1.04 ***********************)
  81. (* InPath   : Pfad Voreinstellung z.B. C:\Hammer\*.123            *)
  82. (* INSelect : Voreinstellung für den Dateinamen z.B. UNTITLED.123 *)
  83. (* ExButton : 0 = Abbruch, 1 = OK                                 *)
  84. (* label    : Titeltext der File Select box                       *)
  85. (* Rückgabe : 0 Fehler bei der Durchführung, #0 Kein Fehler       *)
  86. (******************************************************************)
  87.  
  88. PROCEDURE EasyFileSelect(VAR Maske, DateiName: ARRAY OF CHAR;  Text : ARRAY OF CHAR):BOOLEAN;
  89.  
  90. (***************** Vereinfachter FileSelector *********************)
  91. (* Maske : Pfad Voreinstellungen z.B. \Hammer\*.123               *)
  92. (* Intern wird das aktuelle Laufwerk und Pfad ermittelt und Maske *)
  93. (* daran angehängt, In der Fileselectbox erhält man also :        *)
  94. (* C:\MODULA\Hammer\*.123                                         *)
  95. (* Zurückgegeben wird in Maske der Pfadname der Ausgewählten Datei*)
  96. (* ohne angehängte WildCards also z.B. C:\LPR\HAMMER\             *)
  97. (* DateiName : Voreinstellnung für den Dateinamen z.B. UNTILED.123*)
  98. (* Zurückgegeben wird der ausgewählte Dateinahme  z.B: TEST.123   *)
  99. (* Text : Titeltext der Fileselectorbox ab TOS 1.04 ansonsten wird*)
  100. (* Text ignoriert und die 'normale' Fileselectorbox aufgerufen    *)
  101. (* Hierbei wird auch der Cookie abgefragt d.h wenn Selectric      *)
  102. (* installiert ist wird die Fileselectbox mit Titeltext aufgerufen*)
  103. (* Rückgabe : TRUE Kein Fehler OK angewählt                       *)
  104. (*            FALSE Abbruch gewählt oder Fehler                   *)
  105. (* c->M2  -> ST 4/93                                              *)
  106. (******************************************************************)
  107.  
  108. PROCEDURE MoveFormDo(TreePtr :ADDRESS; EditObject :INTEGER):INTEGER;
  109. (****************** Dialog Box Ausführen *****************************)
  110. (* Der GegenPart zu AES.FormDo mit den unter DoMoveDialog            *)
  111. (* beschriebenen Erweiterungen. Die Checkboxen werden allerdings nur *)
  112. (* unter DoMoveDialog initialisiert -> entweder muß der Status       *)
  113. (* Selected schon im RCS gegeben werden oder hier vorher "von Hand"  *)
  114. (* Meine Empfehlung: Beim ersten Aufruf einer DialogBox DoMoveDialog *)
  115. (* verwenden, und später dann mit MoveFormDo weitermachen dann merkt *)
  116. (* die Dialogbox sich auch ihren Ort und taucht immer an der selben  *)
  117. (* Stelle auf.                                                       *)
  118. (*********************************************************************)
  119.  
  120.  
  121.  
  122. PROCEDURE DoDialog(DialogAdresse:ADDRESS;ErstesObject:INTEGER):INTEGER;
  123.  
  124. (****************** Dialog Box Ausführen *****************************)
  125. (* DialogAdresse : Adresse des Dialoges, zu ermitteln mit            *)
  126. (* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse)                 *)
  127. (* NummerDerBox ist Vom RCS erzeugt worden und Steht in der .I -Datei*)
  128. (* ErstesObject : Erstes Editierbares Object, dort steht dann der    *)
  129. (* Cursor im Edit Feld                                               *)
  130. (* Rückgabe : Das Feld das zum Verlassen der Box angeklickt wurde.   *)
  131. (* DoDialog zeichnet eine Dialogbox und führt Sie aus. Es werden     *)
  132. (* Grow- und Shrink-Boxen von der Cursor Position ab und am Ende zu  *)
  133. (* ihr hin Gezeichnet. Redraw Message wird ans GEM geschickt         *)
  134. (*********************************************************************)
  135.  
  136. PROCEDURE DoMoveDialog(DialogAdresse:ADDRESS;ErstesObject:INTEGER):INTEGER;
  137. (****************** Dialog Box Ausführen *****************************)
  138. (* DialogAdresse : Adresse des Dialoges, zu ermitteln mit            *)
  139. (* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse)                 *)
  140. (* NummerDerBox ist Vom RCS erzeugt worden und Steht in der .I -Datei*)
  141. (* ErstesObject : Erstes Editierbares Object, dort steht dann der    *)
  142. (* Cursor im Edit Feld                                               *)
  143. (* Rückgabe : Das Feld das zum Verlassen der Box angeklickt wurde.   *)
  144. (* DoMoveDialog zeichnet eine verschiebbare Dialogbox und führt Sie  *)
  145. (* aus. Es werden keine Grow- und Shrink-Boxen gezeichnet            *)
  146. (* ihr hin Gezeichnet. Der Bildschirm wird selbsttätig renoviert     *)
  147. (* Der Dialog kann wie gewöhnlich im RCS erzeugt werden !!!          *)
  148. (* Als Schmankerln sind hier noch ein paar Erweiterungen eingebaut   *)
  149. (* 1.) Tastatursteuerung: wird Alt+Taste gedrückt so wird der Button *)
  150. (* im Dialogbaum ausgeführt der als letztes(!) diese Taste in Groß-  *)
  151. (* buchstaben enthält. Dabei ist es gleichgültig ob der Buttontext   *)
  152. (* noch andere Großbuchstaben enthält. OK reagiert also auf Alt-O    *)
  153. (* und(!) auf Alt-K.                                                 *)
  154. (* 2.) Checkboxes: Ein Object vom Typ GBox das die Hintergrundfarbe  *)
  155. (* schwarz hat und den Status crossed besitzt wird a) beim Aufruf    *)
  156. (* von DoMoveDialog invertiert so das es nun eine weiße Box mit      *)
  157. (* schwarzem Kreuz ist und b) wenn es im Dialog angeklickt wird mit  *)
  158. (* dem Status Checked+Selected belegt -> weiße Box                   *)
  159. (* 3.) Wenn es kein DEFAULT-Object gibt wird mit ENTER bzw. RETURN   *)
  160. (* der nächste editierbare Eintrag angesprungen.                     *)
  161. (*********************************************************************)
  162.  
  163. (* In der ST 6/92  'XObjects' ist beschrieben wie man die Unterstriche*)
  164. (* u.a. erzeugt                                                       *)
  165. (* ST 7,8/91 'Checkboxen unter GEM'gab die Anregung zu den Checkboxen *)
  166. (* ST 2/92 Form_kebd & Form_Button in Maxon Pascal gaben die Anregung *)
  167. (* zur Implementierung der Tastatursteuerung                          *)
  168.  
  169. PROCEDURE DrawDialog(DialogAdresse:ADDRESS);
  170.  
  171. (****************** Dialog Box ausgeben  *****************************)
  172. (* DialogAdresse : Adresse des Dialoges                              *)
  173. (* DrawDialog zeichnet eine Dialogbox. Es wird eine                  *)
  174. (* Grow-Box von der Cursor Position aus geöffnet.                    *)
  175. (* Der Bildschirmhintergrund wird gesichert.                         *)
  176. (*   !!! DrawDialog und UndrawDialog niemals einzeln verwenden !!    *)
  177. (*********************************************************************)
  178.  
  179. PROCEDURE UndrawDialog(DialogAdresse : ADDRESS);
  180.  
  181. (****************** Dialog Box schliessen  ***************************)
  182. (* DialogAdresse : Adresse des Dialoges                              *)
  183. (* UndrawDialog shliesst eine Dialogbox. Es wird eine                *)
  184. (* Shrink-Box zur Cursor Position hin gezeichnet. Der Bildschirm     *)
  185. (* wird restauriert oder ggf. eine Redraw Message ans GEM geschickt. *)
  186. (*   !!! DrawDialog und UndrawDialog niemals einzeln verwenden !!    *)
  187. (*********************************************************************)
  188.  
  189. PROCEDURE IsSelected(Index:INTEGER; TreePtr:ADDRESS ) : BOOLEAN;
  190.  
  191. (*********** Hat das Object Index den Status Selected ? ************)
  192. (* Index : Nummer des Objectes.                                    *)
  193. (* TreePtr: Adresse des Dialoges (s.o.)                            *)
  194. (* Rückgabe: TRUE = Ist selectiert, FALSE = Nicht selectiert       *)
  195. (*******************************************************************)
  196.  
  197. PROCEDURE IsCrossed(Index:INTEGER; TreePtr:ADDRESS ) : BOOLEAN;
  198.  
  199. (*********** Hat das Object Index den Status Crossed ? *************)
  200. (* Index : Nummer des Objectes.                                    *)
  201. (* TreePtr: Adresse des Dialoges (s.o.)                            *)
  202. (* Rückgabe: TRUE = Angekreuzt, FALSE = Nicht angekreuzt           *)
  203. (*******************************************************************)
  204.  
  205.  
  206. PROCEDURE GetObjectFlags(Index:INTEGER; TreePtr:ADDRESS ) : INTEGER;
  207.  
  208. (************** Welche flags hat das Object Index  *****************)
  209. (* Index : Nummer des Objectes.                                    *)
  210. (* TreePtr: Adresse des Dialoges (s.o.)                            *)
  211. (* Rückgabe: flags                                                 *)
  212. (* Mögliche Rückgaben sind None, Selectabel, default, Exit, ..     *)
  213. (* HideTree, Indirect. (Siehe GEMAESBase)                          *)
  214. (*******************************************************************)
  215.  
  216. PROCEDURE SetObjectFlags(Index:INTEGER; TreePtr:ADDRESS; NewFlag:INTEGER );
  217.  
  218. (************** Setzt die flags des Objects Index  *****************)
  219. (* Index : Nummer des Objectes.                                    *)
  220. (* TreePtr: Adresse des Dialoges (s.o.)                            *)
  221. (* NewFlags: Dieses flag wird gesetzt.                             *)
  222. (* Mögliche Angaben sind None, Selectabel, default, Exit, ..       *)
  223. (* HideTree. (Siehe GEMAESBase)                                    *)
  224. (* Die Routine wurde entwickelt um das Hidetree und Editable flag  *)
  225. (* zu Setzen d.h. um Einträge in DialogBoxen Unsichtbar zu Machen  *)
  226. (* oder EditFelder editierbar oder nichteditierbar zu machen       *)
  227. (*******************************************************************)
  228.  
  229.  
  230. PROCEDURE GetObjectXYWH(Index:INTEGER; TreePtr:ADDRESS;VAR x,y,w,h:CARDINAL);
  231.  
  232. (************** Welchen Position hat das Object Index? *************)
  233. (* Index : Nummer des Objectes.                                    *)
  234. (* TreePtr: Adresse des Dialoges (s.o.)                            *)
  235. (* x,y,w,h : Position des Objectes                                 *)
  236. (*******************************************************************)
  237.  
  238.  
  239. PROCEDURE SetObjectXYWH(Index:INTEGER; TreePtr:ADDRESS;x,y,w,h:CARDINAL );
  240.  
  241. (************** Setze Position des Objectes  Index *****************)
  242. (* Index : Nummer des Objectes.                                    *)
  243. (* TreePtr: Adresse des Dialoges (s.o.)                            *)
  244. (* x,y,w,h : Neue Position des Objectes                            *)
  245. (*******************************************************************)
  246.  
  247.  
  248.  
  249. PROCEDURE GetText(Index:INTEGER;TreePtr:ADDRESS; VAR String:ARRAY OF CHAR);
  250.  
  251. (************** Welchen Text hat das Object Index  *****************)
  252. (* Index : Nummer des Objectes.                                    *)
  253. (* TreePtr: Adresse des Dialoges (s.o.)                            *)
  254. (* String : Hier Kommt der Text rein.                              *)
  255. (* Wurde zum einfachen Umgang mit Editfeldern in DialogBoxen       *)
  256. (* entwickelt.                                                     *)
  257. (*******************************************************************)
  258.  
  259. PROCEDURE SetText(Index:INTEGER;TreePtr:ADDRESS; String:ARRAY OF CHAR);
  260.  
  261. (************** Setze den Text des Objects Index * *****************)
  262. (* Index : Nummer des Objectes.                                    *)
  263. (* TreePtr: Adresse des Dialoges (s.o.)                            *)
  264. (* String : Neuer Text, Er sollte nicht länger sein als der        *)
  265. (* Orginaltext der Dialogbox, sonst kommt es zu unangenehmen       *)
  266. (* Überraschungen !                                                *)
  267. (* Wurde zum einfachen Umgang mit Editfeldern in DialogBoxen       *)
  268. (* entwickelt.                                                     *)
  269. (*******************************************************************)
  270.  
  271. PROCEDURE GetObjectTail( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
  272. PROCEDURE GetObjectHead( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
  273. PROCEDURE GetNextObject( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
  274. PROCEDURE GetObjectState( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
  275. PROCEDURE GetObjectType( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
  276. PROCEDURE GetBoxColor(Index:INTEGER;TreePtr:ADDRESS):INTEGER;
  277. PROCEDURE InitCheckBoxes(TreePtr : ADDRESS);
  278.  
  279. END EasyDialog.
  280.